package com.future;

/**
 * Description:
 * 给你一个字符串 s 表示一个学生的出勤记录，其中的每个字符用来标记当天的出勤情况（缺勤、迟到、到场）。记录中只含下面三种字符：
 * <p>
 * 'A'：Absent，缺勤
 * 'L'：Late，迟到
 * 'P'：Present，到场
 * 如果学生能够 同时 满足下面两个条件，则可以获得出勤奖励：
 * <p>
 * (1)按 总出勤 计，学生缺勤（'A'）严格 少于两天。
 * (2)学生 不会 存在 连续 3 天或 连续 3 天以上的迟到（'L'）记录。
 * 如果学生可以获得出勤奖励，返回 true ；否则，返回 false 。
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "PPALLP"
 * 输出：true
 * 解释：学生缺勤次数少于 2 次，且不存在 3 天或以上的连续迟到记录。
 * 示例 2：
 * <p>
 * 输入：s = "PPALLL"
 * 输出：false
 * 解释：学生最后三天连续迟到，所以不满足出勤奖励的条件。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/student-attendance-record-i
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author weiruibai.vendor
 * Date: 2021/10/18 14:26
 */
public class Solution_551 {

    public static void main(String[] args) {

        // ALPLLPPLPLL // true

        String s = "PPALLP";
        s = "PPALLP";
        s = "PPALLL";
        s = "LALL";
        System.out.println(checkRecord(s));
    }

    public static boolean checkRecord(String s) {
        if (null == s) {
            return true;
        }
        int Atime = 0;
        int Ltime = 0;
        int L = s.length();
        for (int i = 0; i < L; i++) {
            Ltime = 0; //每一次进来，就清零（很重要）
            if ('L' == s.charAt(i)) {
                // 遇到迟到，以此为起点检查接下来的是否有连续三个'L'或以上的
                while (i < L && 'L' == s.charAt(i)) {
                    if (Ltime >= 3) {
                        return false;
                    }
                    Ltime++;
                    i++;
                }
                if (Ltime >= 3) {
                    return false;
                }
            }
            if (i < L && 'A' == s.charAt(i)) {
                // 统计'A'的个数
                Atime++;
            }
        }
        return Ltime - 3 < 0 && Atime < 2;
    }
}
